package com.example.myapplication.base;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import androidx.fragment.app.Fragment;

public abstract class BaseFragment extends Fragment {
    protected final String TAG = this.getClass().getName(); // 用于日志输出的tag
    protected View mView; // 当前Fragment的View
    public Context mContext; // 上下文Context

    // 获取布局文件的资源id
    protected abstract int getLayoutId();

    // 初始化视图
    protected abstract void initView();

    // 初始化监听器
    protected abstract void initListener();


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mView = inflater.inflate(getLayoutId(), container, false); // 根据布局文件资源id创建View
        onCreateFragmentView(inflater, container, savedInstanceState); // 调用自定义的创建Fragment视图的方法
        return mView;
    }

    // 子类可以重写该方法来在创建Fragment视图时进行初始化操作
    protected void onCreateFragmentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        initView(); // 初始化视图
        initListener(); // 初始化监听器
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mContext = context; // 当Fragment和Activity建立关联时获取Activity的Context
    }

    //基类中添加通用方法，用于显示Toast消息
    public void showToast(String message) {
        if(mContext != null && message != null) { // 确保上下文和消息不为空
            Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show(); // 显示Toast消息
        }
    }

    // 子类需要实现的点击事件处理方法
    public abstract void onClick(View v);
}
